# 1)编写一个Person类，包括属性(name、age),构造方法、say方法(返回Person自我介绍的字符串)
# 2)编写一个Student类，继承Person类，增加属性(id、score)，以及构造方法，重写say方法(返回Student自我介绍的信息)
# 3)分别创建Person和Student对象，调用say方法输出自我介绍,体会重写的作用
# 定义一个人类
class Person:
    name = None  # 姓名属性
    age = None  # 年龄属性

    # 初始化方法，用于创建Person对象时初始化姓名和年龄
    def __init__(self, name, age):
        self.name = name  # 设置姓名
        self.age = age  # 设置年龄

    # 说方法，用于Person对象自我介绍
    def say(self):
        return "我的名字叫%s,今年%d岁了" % (self.name, self.age)  # 返回自我介绍的字符串


# 定义一个学生类，继承自Person类
class Student(Person):
    id = None  # 学号属性
    score = None  # 成绩属性

    # 初始化方法，用于创建Student对象时初始化姓名、年龄、学号和成绩
    def __init__(self, name, age, id, score):
        super().__init__(name, age)  # 调用父类的初始化方法初始化姓名和年龄
        self.id = id  # 设置学号
        self.score = score  # 设置成绩

    # 重写说方法，用于Student对象自我介绍时包含学号和成绩信息
    def say(self):
        return "%s,我的学号是%s,成绩是%d分" % (super().say(), self.id, self.score)  # 返回包含学号和成绩的自我介绍字符串


# 创建一个Person对象并调用say方法
p = Person("jack", 123)
# 创建一个Student对象并调用say方法
s = Student("jack", 123, 1, 100)
print(p.say())  # 打印Person对象的自我介绍
print(s.say())  # 打印Student对象的自我介绍
